home *** CD-ROM | disk | FTP | other *** search
/ InterCD 2000 September / september_2000.iso / intercd / root / ^Linux / cdrtools-1.10 / include / device.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-10  |  3.5 KB  |  125 lines

  1. /* @(#)device.h    1.5 00/01/10 Copyright 1995 J. Schilling */
  2. /*
  3.  *    Generic header for users of major(), minor() and makedev()
  4.  *
  5.  *    NOTE: You need to include <sys/types.h> before <device.h>
  6.  *
  7.  *    Copyright (c) 1995 J. Schilling
  8.  */
  9. /*
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2, or (at your option)
  13.  * any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; see the file COPYING.  If not, write to
  22.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  23.  */
  24.  
  25. #ifndef    _DEVICE_H
  26. #define    _DEVICE_H
  27.  
  28. #ifndef _MCONFIG_H
  29. #include <mconfig.h>
  30. #endif
  31.  
  32. /*
  33.  * On generic SVR4, major is a function (defined in sys/mkdev.h).
  34.  * On Solaris it is defined ...
  35.  * As we cannot just test if major is #define'd, we have to 
  36.  * define _FOUND_MAJOR_ instead.
  37.  *
  38.  * WARNING: Do never include <sys/sysmacros.h> in SVR4, it contains
  39.  * an old definition for major()/minor() defining 8 minorbits.
  40.  * Use <sys/mkdev.h> instead.
  41.  */
  42. #include <sys/types.h>
  43. /*
  44.  * Some systems define major in <sys/types.h>.
  45.  * We are ready...
  46.  */
  47. #ifdef major
  48. #    define _FOUND_MAJOR_
  49. #endif
  50.  
  51. #ifdef MAJOR_IN_MKDEV
  52. #    include <sys/mkdev.h>
  53. #    define _FOUND_MAJOR_
  54. #endif
  55.  
  56. #ifndef _FOUND_MAJOR_
  57. #    ifdef MAJOR_IN_SYSMACROS
  58. #        include <sys/sysmacros.h>
  59. #        define _FOUND_MAJOR_
  60. #    endif
  61. #endif
  62.  
  63. /*
  64.  * If we are on HP/UX before HP/UX 8,
  65.  * major/minor are not in <sys/sysmacros.h>.
  66.  */
  67. #ifndef _FOUND_MAJOR_
  68. #    if defined(hpux) || defined(__hpux__) || defined(__hpux)
  69. #        include <sys/mknod.h>
  70. #        define _FOUND_MAJOR_
  71. #    endif
  72. #endif
  73.  
  74. /*
  75.  * For all other systems define major()/minor() here.
  76.  * XXX Check if this definition will be usefull for ms dos too.
  77.  */
  78. #ifndef _FOUND_MAJOR_
  79. #    define major(dev)        (((dev) >> 8) & 0xFF)
  80. #    define minor(dev)        ((dev) & 0xFF)
  81. #    define makedev(majo, mino)    (((majo) << 8) | (mino))
  82. #endif
  83.  
  84. /*
  85.  * Don't pollute namespace...
  86.  */
  87. #undef _FOUND_MAJOR_
  88.  
  89. #ifdef    __XDEV__
  90. /*
  91.  * The following defines are currently only needed for 'star'.
  92.  * We make it conditional code to avoid to pollute the namespace.
  93.  */
  94. #define    XDEV_T    unsigned long
  95.  
  96. extern    int    minorbits;
  97. extern    XDEV_T    minormask;
  98. extern    XDEV_T    _dev_mask[];
  99.  
  100. #define    dev_major(dev)            (((XDEV_T)(dev)) >> minorbits)
  101. #define    _dev_major(mbits,dev)        (((XDEV_T)(dev)) >> (mbits))
  102.  
  103. #define    dev_minor(dev)            (((XDEV_T)(dev)) & minormask)
  104. #define    _dev_minor(mbits,dev)        (((XDEV_T)(dev)) & _dev_mask[(mbits)])
  105.  
  106.  
  107. #define    dev_make(majo, mino)        ((((XDEV_T)(majo)) << minorbits) | \
  108.                             ((XDEV_T)(mino)))
  109. #define    _dev_make(mbits,majo,mino)    ((((XDEV_T)(majo)) << (mbits) | \
  110.                             ((XDEV_T)(mino)))
  111.  
  112. extern    void    dev_init    __PR((BOOL debug));
  113. #ifndef    dev_major
  114. extern    XDEV_T    dev_major    __PR((XDEV_T dev));
  115. extern    XDEV_T    _dev_major    __PR((int mbits, XDEV_T dev));
  116. extern    XDEV_T    dev_minor    __PR((XDEV_T dev));
  117. extern    XDEV_T    _dev_minor    __PR((int mbits, XDEV_T dev));
  118. extern    XDEV_T    dev_make    __PR((XDEV_T majo, XDEV_T mino));
  119. extern    XDEV_T    _dev_make    __PR((int mbits, XDEV_T majo, XDEV_T mino));
  120. #endif
  121.  
  122. #endif    /* __XDEV__ */
  123.  
  124. #endif    /* _DEVICE_H */
  125.